5 Анализ эффективности работы отдела продаж¶

(Sales Dept Efficiency Analys)

Загрузка модулей и функций¶

In [1]:
# load modules and functions 
import os
import numpy as np
import pandas as pd
from pandas import DataFrame

import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import plotly.graph_objects as go

import ipywidgets as widgets
from IPython.display import display


from colorama import Fore, Back, Style
from datetime import time, timedelta

import My_Function_050824_M_Filimonov as mvf # loading functions written by me for the Project from a file 

# load DataFrames:
spend = pd.read_pickle("03_spend.pkl")
deals = pd.read_pickle("04_deals.pkl")

5.1 Оцените эффективность отдельных владельцев сделок и рекламных кампаний с точки зрения количества обработанных сделок, коэффициента конверсии и общей суммы продаж.¶

5.1.1 Анализ эффективности менердеров продаж (владельцев сделок)¶

In [2]:
owners_stats = deals.groupby("Deal_Owner_Name",observed=False).agg(
    Total_Deals=("Id", "count"),                                           
    Successful_Deals=("Stage", lambda x: (x == "Payment Done").sum()),     
    Revenue=("Paid", lambda x: x[deals["Stage"] == "Payment Done"].sum())  # Total sales amount
)

owners_stats["Conversion_Rate (%)"] = owners_stats["Successful_Deals"] / owners_stats["Total_Deals"] * 100

# Set float display format
pd.set_option('display.float_format', '{:,.2f}'.format)
pd.set_option("display.max_rows", 40)

print(Back.YELLOW + "\nSummary table of sales manager performance indicators"  + Style.RESET_ALL)
display(owners_stats.sort_values(by="Conversion_Rate (%)", ascending=False))

Summary table of sales manager performance indicators
Total_Deals Successful_Deals Revenue Conversion_Rate (%)
Deal_Owner_Name
Oliver Taylor 163 50 430,727.27 30.67
Kevin Parker 574 40 177,235.45 6.97
Ulysses Adams 2166 141 635,404.40 6.51
John Doe 20 1 0.00 5.00
Charlie Davis 2963 148 681,556.22 4.99
Paula Underwood 1862 93 390,481.51 4.99
Julia Nelson 2241 93 509,024.54 4.15
Eva Kent 460 18 32,143.02 3.91
Nina Scott 1283 46 206,605.76 3.59
Victor Barnes 1232 44 195,854.55 3.57
Quincy Vincent 1884 65 267,613.04 3.45
Ben Hall 1345 46 134,244.54 3.42
Jane Smith 988 31 195,053.19 3.14
Cara Iverson 1056 27 57,330.00 2.56
George King 109 2 5,760.00 1.83
Ian Miller 497 8 19,408.64 1.61
Mason Roberts 268 3 13,400.00 1.12
Diana Evans 1015 1 3,815.00 0.10
Alice Johnson 31 0 0.00 0.00
Bob Brown 340 0 0.00 0.00
Amy Green 66 0 0.00 0.00
Sam Young 67 0 0.00 0.00
Rachel White 871 0 0.00 0.00
Wendy Clark 2 0 0.00 0.00
Xander Dean 3 0 0.00 0.00
Yara Edwards 85 0 0.00 0.00
Zachary Foster 1 0 0.00 0.00

Визуализация индикаторов эффективности менеджеров продаж¶

In [3]:
# graph size and `subplot` (2 rows, 2 columns)
fig, ax = plt.subplots(2, 2, figsize=(14, 10))

# Color scheme (according to Feng Shui :)
colors = ["#3498db", "#2ecc71", "#9b59b6", "#e67e22"]

# Function for adding labels to bars
def add_labels(ax):
    for bar in ax.patches:
        ax.text(bar.get_width() + 0.1, bar.get_y() + bar.get_height()/2,
                f'{int(bar.get_width())}', ha='left', va='center', fontsize=10, color="black")

# Function to remove the top and right frame (spines)
def remove_spines(ax):
    ax.spines["top"].set_visible(False)
    ax.spines["right"].set_visible(False)

# Total Deals
sns.barplot(y=owners_stats.index, x=owners_stats["Total_Deals"], ax=ax[0, 0], color=colors[0])
ax[0, 0].set_title("Total Deals by Deals Owner")
ax[0, 0].set_xlabel("")
ax[0, 0].set_ylabel("")
add_labels(ax[0, 0])
remove_spines(ax[0, 0])

# Successful Deals
sns.barplot(y=owners_stats.index, x=owners_stats["Successful_Deals"], ax=ax[0, 1], color=colors[1])
ax[0, 1].set_title("Successful Deals by Deals Owner")
ax[0, 1].set_xlabel("")
ax[0, 1].set_ylabel("")
add_labels(ax[0, 1])
remove_spines(ax[0, 1])

# Revenue
sns.barplot(y=owners_stats.index, x=owners_stats["Revenue"], ax=ax[1, 0], color=colors[2])
ax[1, 0].set_title("Revenue by Deals Owner")
ax[1, 0].set_xlabel("Revenue, €")
ax[1, 0].set_ylabel("")
add_labels(ax[1, 0])
remove_spines(ax[1, 0])

# Conversion Rate
sns.barplot(y=owners_stats.index, x=owners_stats["Conversion_Rate (%)"], ax=ax[1, 1], color=colors[3])
ax[1, 1].set_title("Conversion Rate (%) by Deals Owner")
ax[1, 1].set_xlabel("Conversion Rate (%)")
ax[1, 1].set_ylabel("")
add_labels(ax[1, 1])
remove_spines(ax[1, 1])

plt.tight_layout(h_pad=3)
plt.show()
No description has been provided for this image

Визуализация эффективности владельцев сделок, которые имеют не нулевую конверсию¶

In [14]:
import plotly.express as px

# Filter owners with conversion > 0
owners_stats = owners_stats[owners_stats["Conversion_Rate (%)"] > 0]

# create scatterplot
fig = px.scatter(
    owners_stats,
    x="Successful_Deals",
    y="Revenue",
    color="Conversion_Rate (%)",
    size="Conversion_Rate (%)",
    hover_name=owners_stats.index,  # Подписи при наведении
    text=owners_stats.index,  # Подписи на графике
    color_continuous_scale="RdYlGn",
    title="Deal Owner Efficiency (Conversion Rate > 0%)",
    labels={"Total_Deals": "Total Deals", "Successful_Deals": "Successful Deals", 
            "Conversion_Rate (%)": "Conversion Rate (%)", "Revenue": "Revenue (€)"}  #Adding a Y-axis label
)

# set up the owner labels (font size 7, closer to the point)
fig.update_traces(
    textposition="top right",  # Размещаем подписи ближе к точке
    textfont=dict(size=7, color="black"),  # Уменьшаем размер шрифта
    marker=dict(line=dict(width=1, color="black"))  # Граница точек
)

# set up color scale
fig.update_layout(coloraxis_colorbar=dict(title="Conversion Rate (%)"))

fig.show()

Результаты анализа эффективности менеджеров продаж:¶

ТОП-5 менеджеров по успешным сделкам и доходу¶
Имя Успешные сделки Доход (€) Конверсия (%)
Charlie Davis 148 681,556.22 4.99
Ulysses Adams 141 635,404.40 6.51
Oliver Taylor 50 430,727.27 30.67
Paula Underwood 93 390,481.51 4.99
Julia Nelson 93 509,024.54 4.15
Менеджеры с наименьшими показателями¶
Имя Успешные сделки Доход (€) Конверсия (%)
Diana Evans 1 3,815.00 0.10
George King 2 5,760.00 1.83
Ian Miller 8 19,408.64 1.61
Alice Johnson 0 0.00 0.00
Bob Brown 0 0.00 0.00
Основные выводы¶
  • Оливер Тейлор обладает самым высоким коэффициентом конверсии (30.67%), но у него сравнительно небольшое количество сделок.
  • Чарли Дэвис и Улисс Адамс лидируют по количеству успешных сделок и совокупному доходу.
  • Менеджеры с нулевой конверсией (например, Алиса Джонсон, Боб Браун) возможно не участвуют в активных продажах или требуют дополнительного обучения.
  • Низкие показатели успешности (0-1 сделки) требуют анализа: возможно, есть сложности с закрытием или отсутствует проработанная стратегия.
Рекомендации по повышению результативности отдела продаж.¶
  1. Оптимизировать работу менеджеров с низкой конверсией, выявить причины отказов и предложить дополнительные инструменты продаж.
  2. Проанализировать эффективность Оливера Тейлора, изучить его методы работы и распространить среди других менеджеров.
  3. Усилить стратегию по увеличению количества сделок у топ-менеджеров (Дэвис, Адамс, Тейлор) для масштабирования успешных подходов.
  4. Пересмотреть работу менеджеров с нулевыми продажами, определить, нужна ли им дополнительная поддержка или перераспределение задач.

5.1.2 Анализ эффективности рекламных кампаний¶

In [5]:
campaign_stats = deals.groupby("Campaign",observed=False).agg(
    Total_Deals=("Id", "count"),                          
    Successful_Deals=("Stage", lambda x: (x == "Payment Done").sum()),  
    Revenue=("Paid", lambda x: x[deals["Stage"] == "Payment Done"].sum())                              
)

campaign_stats["Conversion_Rate (%)"] = campaign_stats["Successful_Deals"] / campaign_stats["Total_Deals"] * 100

# Объединяем с затратами на рекламу
campaign_stats = campaign_stats.merge(
    spend.groupby("Campaign",observed=False)["Spend"].sum().reset_index(),
    on="Campaign",
    how="left"
)

campaign_stats["ROI(%)"] = (campaign_stats["Revenue"] - campaign_stats["Spend"]) / campaign_stats["Spend"]

# Fill missing closing duration values with 0
campaign_stats['ROI(%)'] = campaign_stats['ROI(%)'].fillna(0)
campaign_stats['Spend'] = campaign_stats['Spend'].fillna(0)

# Set float display format
pd.set_option('display.float_format', '{:,.2f}'.format)
pd.set_option("display.max_rows", 20)


campaign_stats = campaign_stats[campaign_stats.Campaign != "unknown"]
campaign_stats = campaign_stats.sort_values(by="Revenue", ascending=False)

print(Back.YELLOW + "\nSummary table of Campaign performance indicators"  + Style.RESET_ALL)
display(campaign_stats)

Summary table of Campaign performance indicators
Campaign Total_Deals Successful_Deals Revenue Conversion_Rate (%) Spend ROI(%)
118 performancemax_digitalmarkt_ru_DE 2653 112 570,485.31 4.22 0.00 0.00
2 02.07.23wide_DE 975 52 291,282.27 5.33 6,913.60 41.13
152 youtube_shorts_DE 1635 53 241,093.49 3.24 14,149.22 16.04
18 12.07.2023wide_DE 1575 48 208,790.00 3.05 9,471.52 21.04
4 03.07.23women 612 31 179,658.18 5.07 4,219.75 41.58
... ... ... ... ... ... ... ...
146 welt_DE 2 0 0.00 0.00 0.00 0.00
149 work_wr 6 0 0.00 0.00 0.00 0.00
150 workingin_DE 48 0 0.00 0.00 0.00 0.00
151 yo_DE 13 0 0.00 0.00 0.00 0.00
153 youtube_shortsin_AT 14 0 0.00 0.00 249.28 -1.00

154 rows × 7 columns

In [15]:
# total_campaign = campaign_stats.shape[0]

# # Graphics update function
# def update_chart(top_n):
#     df = campaign_stats.sort_values(by="Revenue", ascending=False).head(top_n)
               
#     fig = px.bar(df, 
#                  y='Revenue',
#                  x='Campaign', 
#                  orientation="v",
#                  title=f"Top {top_n} (from {total_campaign}) Campaign by Revenue",
#                  text_auto=True)
#     fig.show()

# # Creating an interactive slider to select the number of campaigns
# top_n_selector = widgets.IntSlider(
#     value=15,  # Default value
#     min=5,     
#     max=50,    
#     step=5,    
#     description="Top N:"
# )

# widgets.interactive(update_chart, top_n=top_n_selector)
In [17]:
# for REPORT without interactive slider 
total_campaign = campaign_stats.shape[0]

# Graphics update function
top_n = 15
df = campaign_stats.sort_values(by="Revenue", ascending=False).head(top_n)
           
fig = px.bar(df, 
             y='Revenue',
             x='Campaign', 
             orientation="v",
             title=f"Top {top_n} (from {total_campaign}) Campaign by Revenue",
             text_auto=True)
fig.show()

Результаты анализ эффективности рекламных кампаний:¶

Лидеры по доходу (Revenue)¶

Кампания Сделки Успешные сделки Доход (€) Конверсия (%) ROI (%)
performancemax_digitalmarkt_ru_DE 2653 112 570,485.31 4.22% 0.00%
02.07.23wide_DE 975 52 291,282.27 5.33% 41.13%
youtube_shorts_DE 1635 53 241,093.49 3.24% 16.04%
12.07.2023wide_DE 1575 48 208,790.00 3.05% 21.04%
03.07.23women 612 31 179,658.18 5.07% 41.58%

Выводы

  • performancemax_digitalmarkt_ru_DE лидирует по доходу (570K €), но у нее отсутствуют данные о расходах, поэтому невозможно рассчитать ROI.
  • 02.07.23wide_DE имеет высокий доход (291K €) и ROI 41.13%, что делает ее успешной.
  • youtube_shorts_DE имеет значительный доход (241K €), но ROI ниже (16.04%), что может говорить о высоких затратах.
  • 03.07.23women показывает хорошую конверсию (5.07%) и ROI 41.58%.

Лучшие кампании по конверсии (Conversion Rate)¶

Кампания Конверсия (%) Доход (€) ROI (%)
hanna 100% 8,000.00 0.00%
domain 100% 833.33 0.00%
referral 33.33% 4,000.00 0.00%
web2311_DE 30.00% 12,858.18 0.00%

Выводы

  • hanna и domain показывают 100% конверсию, но у них нет данных о расходах, поэтому ROI невозможно оценить.
  • referral (33.33%) и web2311_DE (30%) также демонстрируют высокий уровень успешных сделок без вложений в рекламу.
  • Эти кампании могут быть органическими источниками клиентов, что стоит учитывать при планировании маркетинга.

Лучшие кампании по ROI (Return on Investment)¶

Кампания ROI (%) Доход (€) Конверсия (%)
web2408_DE 153.41% 31,795.00 3.80%
18.10.23wide_gos_DE 54.37% 18,000.00 4.76%
02.07.23wide_DE 41.13% 291,282.27 5.33%

Выводы

  • web2408_DE демонстрирует невероятно высокий ROI (153.41%) — сверхэффективная реклама с минимальными затратами (205.91 €).
  • 18.10.23wide_gos_DE также имеет хороший ROI (54.37%) при сравнительно небольшом доходе.
  • 02.07.23wide_DE — одна из самых прибыльных кампаний по доходу и ROI.

Убыточные кампании (ROI < 0%)¶

Кампания ROI (%) Доход (€) Расходы (€)
performancemax_eng_DE -0.94% 2,000.00 34,183.45
discovery_DE -0.49% 5,000.00 9,750.63
01.04.23women_PL -1.00% 0.00 357.25

Выводы

  • performancemax_eng_DE убыточна: вложенные средства в 34K € не принесли прибыли.
  • discovery_DE тоже в минусе, имея низкий доход при значительных расходах (9.75K €).
  • Некоторые кампании вообще не получили дохода, но имели расходы (например, 01.04.23women_PL).

Кампании без успешных сделок (0% конверсия)¶

Кампания Сделки Конверсия (%) Расходы (€)
blog_DE 3 0% 0.00
forum_DE 5 0% 0.00
jobs_germany_DE 7 0% 0.00
genie_DE 12 0% 0.00

Выводы

  • blog_DE, forum_DE, jobs_germany_DE, genie_DE — 0% конверсии и 0 € дохода.
  • Эти кампании могли быть неправильно настроены или ориентированы не на ту аудиторию.
  • Рекомендация: Провести аудит и определить причины низкой эффективности.

Общие выводы и рекомендации¶

  • Увеличить инвестиции в кампании с высоким ROI (web2408_DE, 02.07.23wide_DE, 18.10.23wide_gos_DE).
  • Пересмотреть стратегию убыточных кампаний, возможно, требуется изменить таргетинг или предложение (performancemax_eng_DE, discovery_DE).
  • Проанализировать органические кампании (hanna, referral, domain, web2311_DE), чтобы усилить их эффективность без вложений в рекламу.
  • Оптимизировать расходы на кампании с высоким доходом, но низким ROI (например, youtube_shorts_DE).
  • Удалить или полностью изменить кампании, которые не приносят дохода, но требуют затрат (например, 01.04.23women_PL).
  • Аудит кампаний с нулевыми конверсиями (blog_DE, forum_DE, jobs_germany_DE, genie_DE) — возможно, они настроены неэффективно.

Связь коэффициента конверсии и общей суммы продаж по кампаниям¶

In [7]:
# Удаляем строки с отсутствующими значениями
#campaign_stats.dropna(subset=["Conversion_Rate (%)", "Revenue"], inplace=True)

# Строим диаграмму рассеяния
plt.figure(figsize=(8, 5))
sns.scatterplot(x=campaign_stats["Conversion_Rate (%)"], y=campaign_stats["Revenue"], s=80, alpha=0.7)

plt.xlabel("Conversion Rate (%)")
plt.ylabel("Revenue (€)")
plt.title("Revenue and Conversion Rate Relationship")

plt.show()
No description has been provided for this image

Основные наблюдения:

  • Концентрация данных в нижней части графика: большинство точек расположено в диапазоне 0-20% конверсии и 0-100,000€ продаж. -Это говорит о том, что большая часть кампаний имеет умеренную конверсию и средний объём продаж.

Выбросы и аномальные значения

  • Есть один явный выброс с конверсией около 100% и общей суммой продаж ~190,000€.
  • Это может быть специфическая кампания, где малый объём сделок даёт высокий процент конверсии.

Общий тренд

  • Если точки сгруппированы вдоль восходящей линии, это означает, что увеличение конверсии приводит к росту продаж.
  • Если точки хаотично расположены, значит, конверсия не всегда коррелирует с продажами, возможно, есть другие влияющие факторы.

Выводы и рекомендации:

  • Анализировать выбросы → понять, почему одна кампания значительно превышает другие по показателям.
  • Оценить эффективность низкоконверсионных кампаний → улучшить таргетинг, тестировать новые стратегии.
  • Построить регрессионную модель → чтобы лучше понять, насколько конверсия влияет на продажи.

Анализ степени влияния коэффициент конверсии (Conversion Rate) на доход (Revenue)¶

Для этого построим регрессионную модель, которая поможет выявить, насколько коэффициент конверсии влияет на доход.

Выберем модель линейной регрессии:

  • Conversion_Rate - предикат
  • Revenue - целевая переменная

Шаги анализа:

  1. Подготовить данные → убрать пропущенные значения.
  2. Выполнить регрессионный анализ → использовать LinearRegression из sklearn.
  3. Визуализировать зависимость → график с линией тренда.
  4. Оценить качество модели → коэффициент детерминации R².
In [8]:
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

# Remove rows with missing values
#campaign_stats1 = campaign_stats.dropna(subset=["Conversion_Rate (%)", "Revenue"])
campaign_stats1 = campaign_stats

# define the predictor and target variable
X = campaign_stats1["Conversion_Rate (%)"].values.reshape(-1, 1)
y = campaign_stats1["Revenue"].values

# create train aтв model 
model = LinearRegression()
model.fit(X, y)

# Predicting values
y_pred = model.predict(X)

# Assessing the accuracy of the model (R²)
r2 = r2_score(y, y_pred)

print(Back.YELLOW + "\nModel Quality Assesment (coefficient R²):"  + Style.RESET_ALL)
print(f"Determination Coefficient (R²): {r2:.4f}")

# visualisation
plt.figure(figsize=(8, 5))
sns.scatterplot(x=campaign_stats1["Conversion_Rate (%)"], y=campaign_stats1["Revenue"], color="blue", alpha=0.7)
plt.plot(campaign_stats1["Conversion_Rate (%)"], y_pred, color="red", linewidth=2, label="Trend line")
plt.xlabel(" Conversion Rate (%)")
plt.ylabel("Revenue (€)")
plt.title("Linear Regression: Conversion Rate on Revenue Impact")
plt.legend()
plt.show()

Model Quality Assesment (coefficient R²):
Determination Coefficient (R²): 0.0004
No description has been provided for this image

Вывод по регрессионному анализу

  • Коэффициент детерминации (R²): 0.0009
  • Это крайне низкое значение, означающее, что конверсия практически не объясняет изменения в доходе.
  • Линейная регрессия предполагает наличие связи между коэффициентом конверсии и выручкой, но полученное значение R² показывает отсутствие сильной зависимости.
  • Красная линия тренда на графике почти горизонтальна, что говорит о том, что изменения в коэффициенте конверсии не приводят к значительным изменениям дохода.
  • Разброс точек → данные распределены хаотично, без явного линейного тренда, что дополнительно подтверждает слабую связь.

Что это означает для бизнеса?

  • Конверсия — не единственный фактор влияния на доход → другие переменные (например, средний чек сделки, качество аудитории, маркетинговые расходы) могут играть более значительную роль.
  • Следует проанализировать дополнительные факторы → сегментировать сделки по другим параметрам (средний размер сделки, источник клиентов).

Матрица корреляции рекламных метрик¶

In [9]:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt


# Выбираем числовые столбцы для анализа корреляции
corr_matrix = campaign_stats[["Total_Deals", "Successful_Deals", "Revenue", "Conversion_Rate (%)", "Spend", "ROI(%)"]].corr()

# Визуализация матрицы корреляции
plt.figure(figsize=(8, 5))
sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap="coolwarm", linewidths=0.5)

plt.title("Advertising Metrics Correlation Matrix")
plt.show()
No description has been provided for this image

На основе представленной матрицы корреляции рекламных метрик, можно выделить несколько ключевых наблюдений:

  1. Общая картина корреляций
  • Вариативность значений от -1 (сильная отрицательная связь) до 1 (сильная положительная связь).
  • 🔵 Холодные цвета (синие оттенки) → низкие значения.
  • 🔴 Тёплые цвета (красные оттенки) → высокие значения.
  • ⚪ Промежуточные (белый/светлый тон) → средние значения.
  • Более светлые оттенки означают слабую корреляцию, а более насыщенные — сильную взаимосвязь.
  1. Основные выводы
  • Сильная положительная корреляция между доходом (Revenue) и количеством успешных сделок (Successful_Deals). Это логично: больше успешных сделок приводит к большему доходу.
  • Слабая или отрицательная корреляция между затратами (Spend), процентом возврата инвестиций (ROI) и конверсией (Conversion_Rate)
  • Это означает, что увеличение затрат не всегда ведёт к росту конверсии (подтверждение вывода регрессионного анализа). Возможно, некоторые кампании неэффективны.
  • ROI имеет положительную связь с доходом, но слабую с затратами. Это говорит о том, что увеличение бюджета не гарантирует рост ROI.
  1. Рекомендации
  • Провести анализ эффективности затрат – найти кампании, где высокий бюджет не приводит к росту конверсии.
  • Усилить фокус на качественных сделках – чем выше процент успешных сделок, тем выше доход.
  • Перераспределить ресурсы – инвестировать в кампании с высоким ROI, а не просто увеличивать бюджет на рекламу.

Анализ взаимосвязи между затратами на маркетинг (Spend) и конверсией (Conversion Rate)¶

In [10]:
# Строим график с регрессионной линией
plt.figure(figsize=(8, 5))
sns.regplot(x=campaign_stats["Spend"], y=campaign_stats["Conversion_Rate (%)"], scatter_kws={"s": 50}, line_kws={"color": "red"})

plt.xlabel("Spend (€)")
plt.ylabel("Conversion Rate (%)")
plt.title("Relationship between Spend and Conversion Rate (with Regression Line)")
plt.show()
No description has been provided for this image

Распределение точек

  • Большинство данных сконцентрировано в нижней части графика, где конверсия <5%, даже при значительных расходах.
  • Некоторые точки выбиваются из общего тренда – они показывают конверсию выше 10-15%, что может говорить о более эффективных кампаниях.

Тренд

  • общая тенденция
  • линия близка к горизонтальной, что означает слабую или отсутствующую связь между затратами и конверсией;
  • при этом просматривается слабый отрицательный наклон линии тренда, что можно интерпретировать как "больше расходов не приводит к улучшению конверсии", возможно, есть проблемы с таргетингом или качеством аудитории.

Выбросы и аномалии

  • свидетельствуют о наличии кампаний с высокими затратами, но низкой конверсией — это повод пересмотреть стратегию.
  • и наоборот, кампании с высокой конверсией при небольших затратах — отличный пример эффективного использования бюджета.

Кампании, где высокий бюджет не приводит к росту конверсии¶

Критерии отбора:

  • Высокие затраты – кампании с Spend > среднего значения
  • Низкая конверсия – кампании с Conversion_Rate < среднего значения.
  • ROI < 1
In [11]:
# Calculate median values
mean_spend = campaign_stats["Spend"].mean()
mean_conversion = campaign_stats["Conversion_Rate (%)"].mean()

print(f"mean_spend: {mean_spend:.2f} €")
print(f"mean_conversion: {mean_conversion:.2f}")
mean_spend: 776.21 €
mean_conversion: 4.48
In [12]:
# Filter campaigns with low costs and high conversions
high_efficiency_campaigns = campaign_stats[(campaign_stats["Spend"] > mean_spend) & 
                                           (campaign_stats["Conversion_Rate (%)"] < mean_conversion) &
                                           (campaign_stats["ROI(%)"] < 1)]

print(Back.YELLOW + "\nCampaigns with low Spend budgets and high Conversion Rates (sort by Convtrsion Rate)"  + Style.RESET_ALL)
display(high_efficiency_campaigns[["Campaign", "Spend", "Conversion_Rate (%)", "ROI(%)"]].sort_values(by="Conversion_Rate (%)", ascending=False))

Campaigns with low Spend budgets and high Conversion Rates (sort by Convtrsion Rate)
Campaign Spend Conversion_Rate (%) ROI(%)
88 discovery_DE 9,750.63 2.13 -0.49
29 1performancemax_wide_PL 2,961.38 1.53 0.84
119 performancemax_eng_DE 34,183.45 0.41 -0.94
89 discovery_wide1_AT 1,308.18 0.00 -1.00

Что делать с этими кампаниями?

  • Аудит стратегии: проверить настройки таргетинга, аудитории и рекламных объявлений.
  • Перераспределение бюджета: возможно, средства стоит направить в более успешные кампании.
  • А/B тестирование: попробовать разные варианты креативов и форматов.

Кампании с низкими затратами, но высокой конверсией¶

Выявление таких кампаний поможет выявить наиболее эффективные рекламные стратегии

Критерии отбора:

  • Низкие затраты – кампании с Spend < среднего значения
  • Высокая конверсия – кампании с Conversion_Rate > среднего значения
  • ROI > 1
In [13]:
# Filter campaigns with low costs and high conversions
high_efficiency_campaigns = campaign_stats[(campaign_stats["Spend"] < mean_spend) & 
                                           (campaign_stats["Conversion_Rate (%)"] > mean_conversion) &
                                           (campaign_stats["ROI(%)"] > 1)]

print(Back.YELLOW + "\nCampaigns with low Spend budgets and high Conversion Rates (sort by Convtrsion Rate)"  + Style.RESET_ALL)
display(high_efficiency_campaigns[["Campaign", "Spend", "Conversion_Rate (%)", "ROI(%)"]].sort_values(by="Conversion_Rate (%)", ascending=False))

Campaigns with low Spend budgets and high Conversion Rates (sort by Convtrsion Rate)
Campaign Spend Conversion_Rate (%) ROI(%)
7 05.09.2023wide_DE 244.51 16.67 43.99
35 20.05.24wide_DE 76.72 12.50 38.10
22 15.03.2024wide_AT 425.01 9.09 3.19
28 18.10.23wide_gos_DE 325.10 4.76 54.37
39 24.07.2023wide_DE 280.35 4.55 14.34

Что делать с этими кампаниями?

  • Масштабировать успешные стратегии – увеличить бюджет на кампании с доказанной эффективностью.
  • Анализ аудитории – какие сегменты срабатывают лучше при минимальных затратах?
  • Применить успешные методы к другим кампаниям – использовать подход из этих кампаний в других рекламных активностях.